// Copyright 2010, Vanya Davidenko.
// Используемая кодировка: UTF-8.

#ifndef LIBV_WINDOWS_LEAN_H_
#define LIBV_WINDOWS_LEAN_H_


/** @file Заголовочный файл, который рекомендуется подключать вместо windows.h,
  * так как он отключает не нужные в большинстве приложений функции и поддержку
  * многих устройств, а так же макросы min и max, которые часто являются
  * источником ошибок.
  *
  * Данный хедер не изменяет уже определенные макросы и не оставляет своих. */

#ifndef _WIN32
# error "Can't include windows.h in non-windows OS"
#endif



#ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# define UNDEF_WIN32_LEAN_AND_MEAN
#endif

#ifndef _WIN32_WINNT
# define _WIN32_WINNT 0x0403  // для TryEnterCriticalSection и
                              // InitializeCriticalSectionEx
# define UNDEF__WIN32_WINNT
#endif



// Перечисление всех NO... из windows.h.

// CC_*, LC_*, PC_*, CP_*, TC_*, RC_
#ifndef NOGDICAPMASKS
# define NOGDICAPMASKS
# define UNDEF_NOGDICAPMASKS
#endif

// VK_*
#ifndef NOVIRTUALKEYCODES
# define NOVIRTUALKEYCODES
# define UNDEF_NOVIRTUALKEYCODES
#endif

// WM_*, EM_*, LB_*, CB_*
#ifndef NOWINMESSAGES
# define NOWINMESSAGES
# define UNDEF_NOWINMESSAGES
#endif

// WS_*, CS_*, ES_*, LBS_*, SBS_*, CBS_*
#ifndef NOWINSTYLES
# define NOWINSTYLES
# define UNDEF_NOWINSTYLES
#endif

// SM_*
#ifndef NOSYSMETRICS
# define NOSYSMETRICS
# define UNDEF_NOSYSMETRICS
#endif

// MF_*
#ifndef NOMENUS
# define NOMENUS
# define UNDEF_NOMENUS
#endif

// IDI_*
#ifndef NOICONS
# define NOICONS
# define UNDEF_NOICONS
#endif

// MK_*
#ifndef NOKEYSTATES
# define NOKEYSTATES
# define UNDEF_NOKEYSTATES
#endif

// SC_*
#ifndef NOSYSCOMMANDS
# define NOSYSCOMMANDS
# define UNDEF_NOSYSCOMMANDS
#endif

// Binary and Tertiary raster ops
#ifndef NORASTEROPS
# define NORASTEROPS
# define UNDEF_NORASTEROPS
#endif

// SW_*
#ifndef NOSHOWWINDOW
# define NOSHOWWINDOW
# define UNDEF_NOSHOWWINDOW
#endif

// OEM Resource values
#ifndef OEMRESOURCE
# define OEMRESOURCE
# define UNDEF_OEMRESOURCE
#endif

// Atom Manager routines
#ifndef NOATOM
# define NOATOM
# define UNDEF_NOATOM
#endif

// Clipboard routines
#ifndef NOCLIPBOARD
# define NOCLIPBOARD
# define UNDEF_NOCLIPBOARD
#endif

// Screen colors
#ifndef NOCOLOR
# define NOCOLOR
# define UNDEF_NOCOLOR
#endif

// Control and Dialog routines
#ifndef NOCTLMGR
# define NOCTLMGR
# define UNDEF_NOCTLMGR
#endif

// DrawText() and DT_*
#ifndef NODRAWTEXT
# define NODRAWTEXT
# define UNDEF_NODRAWTEXT
#endif

// All GDI defines and routines
#ifndef NOGDI
# define NOGDI
# define UNDEF_NOGDI
#endif

// All KERNEL defines and routines
#ifndef NOKERNEL
# define NOKERNEL
# define UNDEF_NOKERNEL
#endif

// All USER defines and routines
#ifndef NOUSER
# define NOUSER
# define UNDEF_NOUSER
#endif

// All NLS defines and routines
#ifndef NONLS
# define NONLS
# define UNDEF_NONLS
#endif

// MB_* and MessageBox()
#ifndef NOMB
# define NOMB
# define UNDEF_NOMB
#endif

// GMEM_*, LMEM_*, GHND, LHND, associated routines
#ifndef NOMEMMGR
# define NOMEMMGR
# define UNDEF_NOMEMMGR
#endif

// typedef METAFILEPICT
#ifndef NOMETAFILE
# define NOMETAFILE
# define UNDEF_NOMETAFILE
#endif

// Macros min(a,b) and max(a,b)
#ifndef NOMINMAX
# define NOMINMAX
# define UNDEF_NOMINMAX
#endif

// typedef MSG and associated routines
#ifndef NOMSG
# define NOMSG
# define UNDEF_NOMSG
#endif

// OpenFile(), OemToAnsi, AnsiToOem, and OF_*
#ifndef NOOPENFILE
# define NOOPENFILE
# define UNDEF_NOOPENFILE
#endif

// SB_* and scrolling routines
#ifndef NOSCROLL
# define NOSCROLL
# define UNDEF_NOSCROLL
#endif

// All Service Controller routines, SERVICE_ equates, etc.
#ifndef NOSERVICE
# define NOSERVICE
# define UNDEF_NOSERVICE
#endif

// Sound driver routines
#ifndef NOSOUND
# define NOSOUND
# define UNDEF_NOSOUND
#endif

// typedef TEXTMETRIC and associated routines
#ifndef NOTEXTMETRIC
# define NOTEXTMETRIC
# define UNDEF_NOTEXTMETRIC
#endif

// SetWindowsHook and WH_*
#ifndef NOWH
# define NOWH
# define UNDEF_NOWH
#endif

// GWL_*, GCL_*, associated routines
#ifndef NOWINOFFSETS
# define NOWINOFFSETS
# define UNDEF_NOWINOFFSETS
#endif

// COMM driver routines
#ifndef NOCOMM
# define NOCOMM
# define UNDEF_NOCOMM
#endif

// Kanji support stuff.
#ifndef NOKANJI
# define NOKANJI
# define UNDEF_NOKANJI
#endif

// Help engine interface.
#ifndef NOHELP
# define NOHELP
# define UNDEF_NOHELP
#endif

// Profiler interface.
#ifndef NOPROFILER
# define NOPROFILER
# define UNDEF_NOPROFILER
#endif

// DeferWindowPos routines
#ifndef NODEFERWINDOWPOS
# define NODEFERWINDOWPOS
# define UNDEF_NODEFERWINDOWPOS
#endif

// Modem Configuration Extensions
#ifndef NOMCX
# define NOMCX
# define UNDEF_NOMCX
#endif

// zlib использует far.
// #ifndef near
// # define UNDEF_near
// #endif
//
// #ifndef far
// # define UNDEF_far
// #endif


#include <windows.h>


// #if defined(near) && defined(UNDEF_near)
// # undef near
// #endif
//
// #if defined(far) && defined(UNDEF_far)
// # undef far
// #endif



#ifdef UNDEF_WIN32_LEAN_AND_MEAN
# undef WIN32_LEAN_AND_MEAN
# undef UNDEF_WIN32_LEAN_AND_MEAN
#endif

#ifdef UNDEF__WIN32_WINNT
# undef _WIN32_WINNT
# undef UNDEF__WIN32_WINNT
#endif

#ifdef UNDEF_NOGDICAPMASKS
# undef NOGDICAPMASKS
# undef UNDEF_NOGDICAPMASKS
#endif

#ifdef UNDEF_NOVIRTUALKEYCODES
# undef NOVIRTUALKEYCODES
# undef UNDEF_NOVIRTUALKEYCODES
#endif

#ifdef UNDEF_NOWINMESSAGES
# undef NOWINMESSAGES
# undef UNDEF_NOWINMESSAGES
#endif

#ifdef UNDEF_NOWINSTYLES
# undef NOWINSTYLES
# undef UNDEF_NOWINSTYLES
#endif

#ifdef UNDEF_NOSYSMETRICS
# undef NOSYSMETRICS
# undef UNDEF_NOSYSMETRICS
#endif

#ifdef UNDEF_NOMENUS
# undef NOMENUS
# undef UNDEF_NOMENUS
#endif

#ifdef UNDEF_NOICONS
# undef NOICONS
# undef UNDEF_NOICONS
#endif

#ifdef UNDEF_NOKEYSTATES
# undef NOKEYSTATES
# undef UNDEF_NOKEYSTATES
#endif

#ifdef UNDEF_NOSYSCOMMANDS
# undef NOSYSCOMMANDS
# undef UNDEF_NOSYSCOMMANDS
#endif

#ifdef UNDEF_NORASTEROPS
# undef NORASTEROPS
# undef UNDEF_NORASTEROPS
#endif

#ifdef UNDEF_NOSHOWWINDOW
# undef NOSHOWWINDOW
# undef UNDEF_NOSHOWWINDOW
#endif

#ifdef UNDEF_OEMRESOURCE
# undef OEMRESOURCE
# undef UNDEF_OEMRESOURCE
#endif

#ifdef UNDEF_NOATOM
# undef NOATOM
# undef UNDEF_NOATOM
#endif

#ifdef UNDEF_NOCLIPBOARD
# undef NOCLIPBOARD
# undef UNDEF_NOCLIPBOARD
#endif

#ifdef UNDEF_NOCOLOR
# undef NOCOLOR
# undef UNDEF_NOCOLOR
#endif

#ifdef UNDEF_NOCTLMGR
# undef NOCTLMGR
# undef UNDEF_NOCTLMGR
#endif

#ifdef UNDEF_NODRAWTEXT
# undef NODRAWTEXT
# undef UNDEF_NODRAWTEXT
#endif

#ifdef UNDEF_NOGDI
# undef NOGDI
# undef UNDEF_NOGDI
#endif

#ifdef UNDEF_NOKERNEL
# undef NOKERNEL
# undef UNDEF_NOKERNEL
#endif

#ifdef UNDEF_NOUSER
# undef NOUSER
# undef UNDEF_NOUSER
#endif

#ifdef UNDEF_NONLS
# undef NONLS
# undef UNDEF_NONLS
#endif

#ifdef UNDEF_NOMB
# undef NOMB
# undef UNDEF_NOMB
#endif

#ifdef UNDEF_NOMEMMGR
# undef NOMEMMGR
# undef UNDEF_NOMEMMGR
#endif

#ifdef UNDEF_NOMETAFILE
# undef NOMETAFILE
# undef UNDEF_NOMETAFILE
#endif

#ifdef UNDEF_NOMINMAX
# undef NOMINMAX
# undef UNDEF_NOMINMAX
#endif

#ifdef UNDEF_NOMSG
# undef NOMSG
# undef UNDEF_NOMSG
#endif

#ifdef UNDEF_NOOPENFILE
# undef NOOPENFILE
# undef UNDEF_NOOPENFILE
#endif

#ifdef UNDEF_NOSCROLL
# undef NOSCROLL
# undef UNDEF_NOSCROLL
#endif

#ifdef UNDEF_NOSERVICE
# undef NOSERVICE
# undef UNDEF_NOSERVICE
#endif

#ifdef UNDEF_NOSOUND
# undef NOSOUND
# undef UNDEF_NOSOUND
#endif

#ifdef UNDEF_NOTEXTMETRIC
# undef NOTEXTMETRIC
# undef UNDEF_NOTEXTMETRIC
#endif

#ifdef UNDEF_NOWH
# undef NOWH
# undef UNDEF_NOWH
#endif

#ifdef UNDEF_NOWINOFFSETS
# undef NOWINOFFSETS
# undef UNDEF_NOWINOFFSETS
#endif

#ifdef UNDEF_NOCOMM
# undef NOCOMM
# undef UNDEF_NOCOMM
#endif

#ifdef UNDEF_NOKANJI
# undef NOKANJI
# undef UNDEF_NOKANJI
#endif

#ifdef UNDEF_NOHELP
# undef NOHELP
# undef UNDEF_NOHELP
#endif

#ifdef UNDEF_NOPROFILER
# undef NOPROFILER
# undef UNDEF_NOPROFILER
#endif

#ifdef UNDEF_NODEFERWINDOWPOS
# undef NODEFERWINDOWPOS
# undef UNDEF_NODEFERWINDOWPOS
#endif

#ifdef UNDEF_NOMCX
# undef NOMCX
# undef UNDEF_NOMCX
#endif

#endif  // LIBV_WINDOWS_LEAN_H_
